/**
 * 全局路由拦截
 * 1. 权限控制
 * 2. np进度条
 */
import router from '@/router/index'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import useUserStore from './stores/user'
import { hasPermission } from './utils/common'
import useSystemStore from './stores/system'
import configGlobal from './config.global'

NProgress.configure({ showSpinner: false })

router.beforeEach((to) => {
  NProgress.start()
  const userStore = useUserStore()

  if (userStore.isLogin) {
    // 1 已登录
    if (to.path === '/login') {
      // 1.1 去登录页面 不允许
      return false
    } else {
      // 1.2 去业务页面
      // 1.2.1 public页面直接放行
      if (!to.meta.roles) {
        return true
      }

      // 1.2.2 校验页面权限
      const permission = hasPermission(to.meta.roles as Array<string>, userStore.userInfo.roles)
      if (permission) {
        // a 有权限
        return true
      } else {
        // b 无权限
        return '/404'
      }
    }
  } else {
    // 2 未登录
    if (to.meta.needLogin) {
      // 2.1 需要登录 转向登录页面
      return { path: '/login' }
    } else {
      // 2.2 不需要登录 放行
      return true
    }
  }
})

router.afterEach((to, from) => {
  NProgress.done()
  if (to.path === '/login' && from.path !== '/') {
    // 记录登录来源
    const systemStore = useSystemStore()
    systemStore.redirectUrl = from.fullPath
  }
  document.title = to.meta.title
    ? `${to.meta.title}-${configGlobal.shortTitle}`
    : configGlobal.title
})
